/**
 * 
 */
package com.ms.game.itembox.container;

import com.ms.game.itembox.Item;
import com.ms.player.Player;
import com.ms.service.error.ErrorCode;
import com.ms.service.module.zone.module.BasicZoneModule;
import com.xpec.c4.game.utility.GUID;

/**
 * 道具使用界面，道具基礎數據結構 {@link ItemBasic} 繼承這個界面，用基礎數據結構衍生出來的 class 就可以直接在 class
 * 裡面實做使用功能。
 * 
 * @author TW15010
 */
public abstract class UseItemInterface {
	/**
	 * 使用物品界面
	 * <p>
	 * 這裡只要專注在使用效果就可以了，扣除物品、物品是否足夠、是否有指定目標.... 等等在進入這邊之前都會檢查好。
	 * 
	 * @param player
	 *            玩家資料
	 * @param useCount
	 *            消耗的數量，扣除物品在呼叫 {@link #use(Player, int, GUID)}
	 *            之前就已經處理了，所以如果使用過程中不需要參考到使用數量就可以不管他
	 * @param targetGuid
	 *            目標玩家的 guid
	 * @return 使用道具結果 {@link ErrorCode}
	 */
	public abstract int use(Player player, Item useItem, int useCount, GUID targetGuid, Object... object);
	
	/**
	 * 去DC增加道具需要增加的數值
	 * 
	 * 記得要移除BlockList
	 * @return
	 */
	public abstract int applyItemToDc(BasicZoneModule zoneModule,Player player, Item useItem , GUID orderId, Object... object);
	
}
